<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1. every 方法  所有项满足返回true，一项不满足返回false
        // var arr = [12, 11, 12, 23]
        // var result = arr.every(function (item, index, curArr) {
        //     return item > 10;
        // })
        // 1.0 放在原型上
        // Array.prototype.myEvery = function (fn) {
        //     for (var i = 0; i < this.length; i++) {
        //         if (!fn(this[i], i, this)) {
        //             return false
        //         }
        //     }
        //     return true
        // }
        // var res = arr.myEvery(function (item, index, curArr) {
        //     return item > 10
        // })
        // console.log(res);


        // 2.0 回调方法
        // let arr = [true,true,false,true];
        // function myEvery(arr, cb) {
        //     let flag = true
        //     for (let i = 0; i < arr.length; i++) {
        //         flag = flag && cb(arr[i], i, arr)
        //         if (!flag) {
        //             break
        //         }
        //     }
        //     return flag
        // }
        // var res = myEvery(arr, function (item) {
        //     return item;
        // })
        // console.log(res);


        // 2. some 方法 测试一个数组内的所有元素是否能通过某个指定函数的测试，一个通过测试就返回true
        // var arr = [15,20,7,5]
        // var res = arr.some(function(item,idx,arr){
        //     return item >21
        // })

        // 1.0 放在原型上
        // Array.prototype.mySome = function (fn) {
        //     for (var i = 0; i < this.length; i++) {
        //         if (fn(this[i], i, this)) {
        //             return true;
        //         }
        //     }
        //     return false
        // }
        // var res = arr.mySome(function (item, index, arr) {
        //     console.log(item,index,arr);
        //     return item > 21
        // })

        // console.log(arr);

        // 2.0 
        // let arr = [false,true,true,,true];
        // function mySome(arr, cb) {
        //     let flag = false;  // 定义个标志 是true ；
        //     for (let i = 0; i < arr.length; i++) {
        //         flag = flag || cb(arr[i], i, arr);
        //         if (flag) {
        //             break;
        //         }
        //     }
        //     return flag;
        // }

        // var res = mySome(arr, function (item) {
        //     return item;
        // })

        // console.log(res);



        // every 方法 另一种思路
        let arr = [11, 12, 13, 17];

        // 思路：循环数组 ，一旦遇到false 就返还且停止循环 ，如果全部为true 直接返还true结果；
        function myEvery(arr, cb) {
            // let res  = true;
            let result;
            for (let i = 0; i < arr.length; i++) {
                // let result = cb(arr[i],i)
                // if(!result){
                //     // res = result;
                //     break;
                // }
                result = cb(arr[i], i)
                if (!result)
                    break;
                // return result

            }
            return result;
        }

        let result = myEvery(arr, function (item) {
            return item >10;
        })
        console.log("结果", result);


        // 深拷贝
        // var obj = {
        //     name: '李四',
        //     age: 18,
        //     hobby: {
        //         name1: 'lanqiu'
        //     }
        // }
        // function fn(obj) {
        //     var obj2 = Object.prototype.toString.call(obj) === '[object Array]' ? [] : {};
        //     for (var key in obj) {
        //         if (obj.hasOwProperty(key)) {
        //             if (typeof obj[key] === 'object') {
        //                 obj2[key] = fn(obj[key])
        //             } else {
        //                 obj2[key] = obj[key]
        //             }
        //         }
        //     }
        //     return obj2
        // }

        // var obj2 = fn(obj)
        // obj2.hobby.name1 = 'qiu'
        // console.log(obj2);
        // console.log(obj);
    </script>
</body>

</html>